﻿using UniMana.Utils.LoadData;
using UniMana.Utils.Control;
using UniMana.Lib.Quiz;
using UniMana.Data.Quiz;
using System.Linq;
using System.Windows.Forms;
using System;
using UniMana.Gui.Quiz;
using UniMana.Utils.CusControls;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using System.IO;

namespace UniMana.GUI.Quiz
{
    public partial class FrmQuestionDetail : DevExpress.XtraEditors.XtraForm
    {
        public DBQuiz m_data = new DBQuiz();
        public bds m_bdsAnsewer = new bds();
        public Quiz_QuestionInfo m_QuestionInfo = new Quiz_QuestionInfo();
        public Quiz_AnsewerTextInfo m_AswTextInfo = new Quiz_AnsewerTextInfo();
        
        public FrmQuestionDetail()
        {
            InitializeComponent();

        }

        public FrmQuestionDetail(int disableXucBar)
        {
            InitializeComponent();
            this.xucBar2.Visible = false;
        }

        #region [Utils]

        //Nạp dữ liệu 
        public void LoadData()
        {
            #region [Dropdowns]
            lueQuiz_QuestionLevel.GetData(m_data.m_DCReadOnly.Quiz_QuestionLevels);
            lueQuiz_QuestionType.GetData(m_data.m_DCReadOnly.Quiz_QuestionTypes);
            gluTraining_Subject.GetData(m_data.m_DCReadOnly.Training_Subjects, "Training_SubjectKey");
            rluCatalogue_Department.GetData(m_data.m_DCReadOnly.Catalogue_Departments.Where(p=>p.SubjectManage==true));
            gluQuiz_SubjectTopic.GetData(m_data.m_DCReadOnly.Quiz_SubjectTopics, "Quiz_SubjectTopicKey");
            this.BindData();
            #endregion
        }

        //Bind dữ liệu
        public void BindData()
        {
            try
            {
                lcgInfo.LoadOneRecord(m_QuestionInfo.m_bds);
                redAnserText.DataBindings.Clear();
                redAnserText.DataBindings.Add(new Binding("RTFText", m_AswTextInfo.m_bds, "Answer"));

                redQContent.DataBindings.Clear();
                redQContent.DataBindings.Add(new Binding("RTFText", m_QuestionInfo.m_bds, "QContent"));


                if (this.m_QuestionInfo.Properties.Training_SubjectKey.ToString() != string.Empty)
                {
                    gluTraining_Subject.EditValue = this.m_QuestionInfo.Properties.Training_SubjectKey;
                }


                //Nạp dữ liệu lại trên lưới
                if (this.m_QuestionInfo.Properties.QContent != string.Empty)
                {
                    var qr = from asw in m_data.m_DCSave.Quiz_AnsewerQuizs
                             where asw.Quiz_QuestionKey == this.m_QuestionInfo.Properties.Quiz_QuestionKey
                             select asw;
                    m_bdsAnsewer.DataSource = qr;
                }

                this.SetEditState();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        //Khởi tạo sự kiện cho các control
        public void InitControlEvents()
        {
            xucBar2.btnSave_Click += new Controls.xucBar.ButtonClickHandler(btnSaveAndClose_Click);
            xucBar2.btnAddNew_Click += new Controls.xucBar.ButtonClickHandler(btnSaveAndAdd_Click);
        }

        //Disable/Enable các pannel nhập liệu
        public void SetEditState()
        {
            if (lueQuiz_QuestionType.GetIntValue() == Quiz_Config.I_QUIZ)
            {
                xtpQuiz.PageEnabled = true;
                xtpText.PageEnabled = false;
                return;
            }
            else if (lueQuiz_QuestionType.GetIntValue() == Quiz_Config.I_TEXT)
            {
                xtpText.PageEnabled = true;
                xtpQuiz.PageEnabled = false;
                return;
            }
            else
            {
                xtpText.PageEnabled = false;
                xtpQuiz.PageEnabled = false;
            }
        }

        #endregion

        #region [Xucbar Events]

        //Lưu&đóng
        private void btnSaveAndClose_Click(object sender, ItemClickEventArgs e)
        {
            this.Save(e,true);
        }

        //Lưu&Thêm mới
        private void btnSaveAndAdd_Click(object sender, ItemClickEventArgs e)
        {
            this.Save(e, false);
            //Lưu lại một số giá trị
            int subjectKey=0,quesType=0,quesLevl=0,quizTopic=0; 
            try
            {
                subjectKey = int.Parse(gluTraining_Subject.GetIntValue().ToString());
                quesType = int.Parse(lueQuiz_QuestionType.GetIntValue().ToString());
                quesLevl = int.Parse(lueQuiz_QuestionLevel.GetIntValue().ToString());
                quizTopic = int.Parse(gluQuiz_SubjectTopic.GetIntValue().ToString());
            }
            catch { }

            this.m_QuestionInfo = new Quiz_QuestionInfo("");
            this.m_AswTextInfo = new Quiz_AnsewerTextInfo("");
            string key = this.CreateKey();
            this.m_QuestionInfo.Properties.Quiz_QuestionKey = key;
            this.m_AswTextInfo.Properties.Quiz_QuestionKey = key;
            this.BindData();
            //Set các giá trị mặt định
            try
            {
                this.m_QuestionInfo.Properties.Training_SubjectKey = subjectKey;
                this.m_QuestionInfo.Properties.Quiz_QuestionTypeKey = quesType;
                this.m_QuestionInfo.Properties.Quiz_QuestionLevelKey = quesLevl;
                this.m_QuestionInfo.Properties.Quiz_SubjectTopicKey = quizTopic;
            }
            catch { }
        }

        //Lưu
        public void Save(ItemClickEventArgs e, bool willClose = false)
        {
            if (dxValidationProvider1.Validate())
            {
                try
                {
                    if (m_QuestionInfo.Properties.CreatedOn == null)
                    {
                        //this.m_QuestionInfo.Properties.CreatedOn = UniMana.Lib.Sys.SysDateTime.Now;
                    }
                    //Chưa có status thì set = false (Chưa được duyêt)
                    if (this.m_QuestionInfo.Properties.Status == null)
                    {
                        this.m_QuestionInfo.Properties.Status = false;
                    }
                    this.m_QuestionInfo.Save();
                    //Nếu là câu trắc nghiệm
                    if (lueQuiz_QuestionType.GetIntValue() == Quiz_Config.I_QUIZ)
                    {
                        this.Validate();
                        m_bdsAnsewer.EndEdit();
                        this.m_data.m_DCSave.SubmitChanges();
                    }
                    //Nếu là câu tự luận
                    else if (lueQuiz_QuestionType.GetIntValue() == Quiz_Config.I_TEXT)
                    {
                        this.m_AswTextInfo.Save();
                    }
                    if (willClose) this.Close();
                }
                catch { XtraMessageBox.Show("Không thể lưu - vui lòng liên hệ nhóm phát triển để được hỗ trợ","Ngân hàng đề thi - Lỗi",MessageBoxButtons.OK, MessageBoxIcon.Error); }
            }
        }


        //Tạo Key theo thời gian
        public string CreateKey()
        {
            string rand = DateTime.Now.ToFileTime().ToString();
            return rand;
        }
        #endregion

        #region [Form Events]

        //Sự kiện load form
        private void FrmQuestionDetail_Load(object sender, EventArgs e)
        {
            LoadData();
            InitControlEvents();
            gctAnswer.DataSource = m_bdsAnsewer;

        }

        //Thêm đáp án
        private void btnAdd_Click(object sender, EventArgs e)
        {
            Quiz_AnsewerQuiz aquz = new Quiz_AnsewerQuiz();
            aquz.Quiz_QuestionKey = this.m_QuestionInfo.Properties.Quiz_QuestionKey;
            aquz.IsTrue = false;
            m_bdsAnsewer.Add(aquz);
            m_bdsAnsewer.MoveLast();
        }

        //Xóa đáp án
        private void btnDelete_Click(object sender, EventArgs e)
        {
            m_bdsAnsewer.RemoveCurrent();
        }

        //Loại câu hỏi đổi
        private void lueQuiz_QuestionType_EditValueChanged(object sender, EventArgs e)
        {
            this.SetEditState();
        }

        //Môn thay đổi, lấy chủ đề theo môn
        private void gluTraining_Subject_EditValueChanged(object sender, EventArgs e)
        {
            gluQuiz_SubjectTopic.GetData(m_data.m_DCReadOnly.Quiz_SubjectTopics.Where(p => p.Training_SubjectKey == gluTraining_Subject.GetIntValue()), "Quiz_SubjectTopicKey");
        }

        //Soạn nội dung câu hỏi
        private void btnAdvEdit1_Click(object sender, EventArgs e)
        {
            FrmEditor frmEditor = new FrmEditor();
            frmEditor.Text = "Soạn thảo nội dung câu hỏi";
            frmEditor.redEditor.RtfText = redQContent.RtfText;
            frmEditor.ShowDialog();
            if (frmEditor.willSetParrentText)
            {
                redQContent.RtfText = frmEditor.redEditor.RtfText;
            }
        }

        //Soạn đáp án tự luận
        private void btnAdvEdit2_Click(object sender, EventArgs e)
        {
            FrmEditor frmEditor = new FrmEditor();
            frmEditor.Text = "Soạn thảo đáp án câu hỏi";
            frmEditor.redEditor.RtfText = redAnserText.RtfText;
            frmEditor.ShowDialog();

            if (frmEditor.willSetParrentText)
            {
                redAnserText.RtfText = frmEditor.redEditor.RtfText;
            }
        }
        #endregion


    }
}